Skip to content

AI Coding 工作流 ​

标签
AI/agent/AI Coding
字数
4609 字
阅读时间
18 分钟

这一篇讲两件事:Vibe Coding 为什么在某些场景失效,以及替代它的 Spec-Driven Development 具体是什么。以及——这批工具到底提不提速,实测数据是怎么说的。

先说数据:感觉更快 ≠ 更快 ​

这个领域的讨论经常停在体感上,但有几组一手研究值得先看。

METR 的随机对照试验(最有说服力的一组) ​

项值
时间2025 年 7 月,arXiv:2507.09089
设计随机对照试验(RCT)
样本16 名资深开源开发者,246 个真实任务
代码库他们平均工作过 5 年的成熟项目
工具Cursor Pro + Claude 3.5 / 3.7 Sonnet
结果用 AI 工具比不用慢 19%
事前预测会快 24%
事后自评快了 20%

感知与现实的差距接近 40 个百分点。 多出来的开销来自写提示、等待、审查输出、以及调试 AI 引入的问题。

这个结果要怎么公平地读:样本小(16 人)、都在自己很熟悉的大型代码库里、用的是 2025 年初的工具。它不证明「AI 让所有人所有任务变慢」,它证明的是「感觉更快」不能作为「更快」的证据。

METR 的随机对照试验:预测、自评与实际测量三者方向相反。

   事前预测        快 24%   ██████████████████
   事后自评        快 20%   ███████████████
   实际测量        慢 19%   ██████████████  ← 方向是反的
                   └─ 感知与现实的差距接近 40 个百分点

   多出来的开销来自写提示、等待、审查输出、以及调试 AI 引入的问题。

实验设计(决定了这组数据的适用范围)
   时间      2025 年 7 月,arXiv:2507.09089
   设计      随机对照试验(RCT)
   样本      16 名资深开源开发者,246 个真实任务
   代码库    他们平均工作过 5 年的成熟项目
   工具      Cursor Pro + Claude 3.5 / 3.7 Sonnet

怎么公平地读它
   样本小(16 人)、都在自己很熟悉的大型代码库里、用 2025 年初的工具
   └─ 它不证明「AI 让所有人所有任务变慢」
      它证明的是「感觉更快」不能作为「更快」的证据

和初级 / 资深的对照 ​

GitHub / MIT / Microsoft / Accenture 对 Copilot 的现场实验给出的画面不同:初级开发者快约 35–39%,资深开发者快 8–16%。

两组数据放在一起,可以拼出一个更有用的结论:

初级开发者受益最大。资深开发者在通用任务上受益较小,而在他们已经很熟悉的成熟代码库里,可能反而变慢。

Vibe Coding 的宣传逻辑是「AI 会填平甚至反转初级与资深的差距」。数据的方向是反的——对熟悉代码库的人在做什么的人来说,工具最多是温和的帮助,在某些任务上甚至主动拖慢。

两组研究的画面不同,合起来才是有用的结论。

   GitHub / MIT / Microsoft / Accenture(Copilot 现场实验)
      初级开发者      快 35–39%   ██████████████████
      资深开发者      快 8–16%    ████████
   METR(资深开发者 + 自己熟悉的成熟代码库)
      资深开发者      慢 19%      ← 方向反了

   合起来的结论
     初级开发者受益最大
     资深开发者在通用任务上受益较小
     而在他们已经很熟悉的成熟代码库里,可能反而变慢

   └─ Vibe Coding 的宣传逻辑是「AI 会填平甚至反转初级与资深的差距」,
      数据的方向是反的。

其他几组数据 —— 都在说同一件事:写得更多 ≠ 交付更快
   Uplevel 调查 800 名开发者
     客观指标(周期时间、PR 吞吐)无显著提升;用 Copilot 的一组 bug 增加 41%
   Faros AI 分析 10000+ 开发者 / 1255 团队
     写得更多、单任务完成更多,但交付速度与业务结果无可测改善
   Stack Overflow 2025 调查
     84% 在用或计划用 AI,但只有 16.3% 报告显著提效,
     41.4% 说几乎没影响;正面情绪从 2023–24 的 70%+ 降到 60%

其他几组数据 ​

来源发现
Uplevel 调查 800 名开发者客观指标(周期时间、PR 吞吐)无显著提升;用 Copilot 的一组 bug 增加 41%
Faros AI 分析 10000+ 开发者 / 1255 团队写得更多、单任务完成更多,但交付速度与业务结果无可测改善
Stack Overflow 2025 调查84% 在用或计划用 AI,但只有 16.3% 报告显著提效,41.4% 说几乎没影响;正面情绪从 2023–24 的 70%+ 降到 60%

「写得更多」和「交付更快」是两件事。 Faros 那组最能说明这一点:产出量上去了,业务指标没动。

Vibe Coding:它是怎么来的,边界在哪 ​

出处和它的原意 ​

Andrej Karpathy 于 2025 年 2 月 2 日在 X 上提出(那条推文 4.5M 浏览),原话:

There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.

一个被普遍忽略的点:Karpathy 描述的是自己做周末玩具项目时的体验,是半开玩笑的说法,不是作为通用工程实践提出的。他自己后来在 MenuGen 的复盘里也承认,代码本身还行,但周边的基建、集成与配置是一团他也不完全理解的乱麻。

几周之内,这个词被教程、YouTube、短视频吸收成了另一套更强的说法——「你不需要再理解代码了」。那个更强的说法才是站不住的。

这个词的传播量级可以参考两个数字:Collins 词典把 "vibe coding" 选为 2025 年度词汇;Y Combinator 报告 2025 冬季批次里 25% 的创业公司代码库 95% 是 AI 生成的。

分界线只有一条:读不读代码 ​

读了再合并 = AI 辅助工程。不读 = 真正的 vibe coding。

「不读」是这个定义的核心,不是附带条件。用 AI 帮忙不构成 vibe coding,不读代码才构成。

这条线之所以是决定性的,因为**「不读」等于放弃了对未言明决定的审查权**。

根因:几百个未言明的决定 ​

从模糊提示生成代码的 agent,必须自己做几百个决定:数据模型形状、错误处理方式、认证方案、边界情况、性能约束、安全姿态。

它每次都会做这些决定。问题只在于你是否注意到了。

具体的失效模式(过去一年在开发者社区被反复记录):

失效模式表现
认证系统明文或弱哈希存密码——上线数周后在数据库审计时才被发现
数据库迁移缺事务包装与回滚策略,迁移中途失败导致生产数据损坏
API 端点没有限流、指数退避、输入校验,上线数小时内被滥用
前端demo 里完美,遇到真实并发状态就崩——agent 从未被要求考虑竞态
测试套件覆盖率 90%,但只测了 agent 自己想象出来的 happy path

每一条都是资深工程师在 code review 里能拦下来的——如果有 code review 的话。

分界线只有一条:读不读代码。

   用 AI 帮忙 ──┬─ 读了再合并 ──▶ AI 辅助工程
                └─ 不读       ──▶ 真正的 vibe coding
                                  └─ 「不读」是这个定义的核心,不是附带条件

为什么这条线是决定性的:「不读」等于放弃了对未言明决定的审查权。

   从模糊提示生成代码的 agent,必须自己做几百个决定
     ├─ 数据模型形状
     ├─ 错误处理方式
     ├─ 认证方案
     ├─ 边界情况
     ├─ 性能约束
     └─ 安全姿态
   它每次都会做这些决定。问题只在于你是否注意到了。

   具体会怎么错(过去一年被反复记录的失效模式)
     认证系统     明文或弱哈希存密码 —— 上线数周后数据库审计时才发现
     数据库迁移   缺事务包装与回滚策略,迁移中途失败导致生产数据损坏
     API 端点     没有限流、指数退避、输入校验,上线数小时内被滥用
     前端         demo 里完美,遇到真实并发状态就崩 —— agent 从未被要求考虑竞态
     测试套件     覆盖率 90%,但只测了 agent 自己想象出来的 happy path
   └─ 每一条都是资深工程师在 code review 里能拦下来的 —— 如果有 code review 的话

三组代码质量的数据 ​

来源发现
Veracode 2025(测 100+ LLM)45% 的 AI 生成代码样本引入 OWASP Top 10 漏洞;AI 代码的 XSS 防护失败率 86%;Java AI 代码失败率 70%+。而且这个比例从 2025 到 2026 初多轮测试都没改善
CodeRabbit 2025-12(470 个开源 PR)AI 合著代码的「major」问题多 1.7 倍,安全漏洞多 2.74 倍,配置错误多 75%
GitClear(纵向分析)重构占比从 25% 降到 10% 以下,代码重复约 4 倍,churn(写了又被快速改掉或删除)接近翻倍

GitClear 那组最值得琢磨:重构占比腰斩 + 重复翻倍 + churn 翻倍,说的是同一件事——代码在被生成,但很少被整理。这正是 AI 生成代码的质量保障 要处理的问题。

两个有记录的事故:

  • 2025-07:一个 Replit AI agent 删除了用户的生产数据库,尽管有明确指令不要做改动
  • 2025-05:1645 个用 Lovable 构建的 web 应用里,170 个被发现有泄露个人信息的漏洞

一条实用的判断规则 ​

在看完这些数据之后,最有用的一条规则只有一个问句:

「如果这段代码坏了,谁会受伤?」

答案做什么
只有我自己全速 vibe。原型、一次性脚本、单用户内部工具——犯错成本是自己的时间
任何人(客户、钱、个人数据、要被别的团队继承的系统)逐行读。 仍然让 AI 写,但任何我解释不了的东西都不合并

这条规则把「Vibe Coding 好不好」这个抽象问题,换成了「这段具体代码的失败会伤到谁」这个可判断的问题。

一条判断规则,把抽象问题换成了可判断的问题。

   问:如果这段代码坏了,谁会受伤?
        │
        ├─ 只有我自己
        │     └─ 全速 vibe
        │        原型、一次性脚本、单用户内部工具
        │        犯错成本是自己的时间
        │
        └─ 任何人(客户、钱、个人数据、
           要被别的团队继承的系统)
              └─ 逐行读
                 仍然让 AI 写,但任何我解释不了的东西都不合并

   └─ 它把「Vibe Coding 好不好」换成「这段具体代码的失败会伤到谁」——
      后者是可判断的

配着这条规则看三组代码质量数据
   Veracode 2025(测 100+ LLM)
     45% 的 AI 生成代码样本引入 OWASP Top 10 漏洞
     AI 代码的 XSS 防护失败率 86%;Java AI 代码失败率 70%+
     └─ 而且这个比例从 2025 到 2026 初多轮测试都没改善
   CodeRabbit 2025-12(470 个开源 PR)
     AI 合著代码的「major」问题多 1.7 倍,安全漏洞多 2.74 倍,配置错误多 75%
   GitClear(纵向分析)
     重构占比从 25% 降到 10% 以下,代码重复约 4 倍,churn 接近翻倍
     └─ 三件事说的是同一件事:代码在被生成,但很少被整理

工具在哪些任务上真的有用 ​

资深工程师的实际使用模式和数据方向是一致的:

真的有收益的(「无聊的中间层」):

  • 从规格脚手架新模块或测试骨架
  • 跨多文件的机械重构:重命名、签名变更、补空值处理——模式清晰但繁琐
  • 从现有代码写测试用例
  • 相似框架或语言之间的翻译
  • 探索不熟悉的代码库、回答具体问题

这些任务是真实的加速,且模型产出「错误种类」的风险有限。它们也恰好是以前吃掉工程师一周里不成比例时间的部分。

收益小但真实的:

真正新颖的工作里,模型更多充当交互式橡皮鸭——一个用来争论架构的对象。价值真实,但难测量。

反而变慢或表现更差的:

  • 在你已经很熟悉的系统里深挖隐蔽 bug——模型生成「看似合理的错修复」比生成对的更快
  • 需要把大量隐式上下文装在脑子里的工作——模型不共享你的心智模型,而把足够多的上下文解释清楚,可能比自己做还费时间
  • 认证、计费、数据层这类高风险代码——每一行都必须对且必须被审查

工具在哪些任务上真的有用,收益是有梯度的。

真有收益 ——「无聊的中间层」
   从规格脚手架新模块或测试骨架
   跨多文件的机械重构:重命名、签名变更、补空值处理
   从现有代码写测试用例
   相似框架或语言之间的翻译
   探索不熟悉的代码库、回答具体问题
   └─ 这些任务是真实的加速,且模型产出「错误种类」的风险有限
      它们也恰好是以前吃掉工程师一周里不成比例时间的部分

收益小但真实
   真正新颖的工作里,模型更多充当交互式橡皮鸭 —— 一个用来争论架构的对象
   └─ 价值真实,但难测量

反而变慢或表现更差
   在你已经很熟悉的系统里深挖隐蔽 bug
     └─ 模型生成「看似合理的错修复」比生成对的更快
   需要把大量隐式上下文装在脑子里的工作
     └─ 模型不共享你的心智模型,而把足够多的上下文解释清楚
        可能比自己做还费时间
   认证、计费、数据层这类高风险代码
     └─ 每一行都必须对且必须被审查

Spec-Driven Development 具体是什么 ​

它不是新概念——术语来自形式化方法与瀑布模型。2026 版的特指是:在调用 AI 编码 agent 之前,写一份结构化、可版本化的规格,让 agent 拿到明确的目标、约束与验收标准。

位置上,它在「人的意图」和「AI 的实现」之间插入一层显式规格:

   人的意图
      │  模糊的提示词:「做一个记账 App」
      ▼
   ┌───────────────────────────────────────────────────┐
   │ 规格(结构化、可版本化)                             │
   │   目标 / 约束 / 验收标准                            │
   │   放在哪里:随代码一起进仓库,能 diff、能 review      │
   └───────────────────────────────────────────────────┘
      │  于是 agent 拿到的是明确的目标与边界
      ▼
   AI 实现
      │
      ▼
   校验 —— 对照规格,而不是对照感觉

位置的含义:没有这一层时,上面那几百个「未言明的决定」全部由 agent 自己拍;
有了这一层,其中一部分被提到明面上,变成可以被 review 的对象。

工具链现状
   GitHub Spec Kit   开源工具包,2026-05-07 时 v0.8.7,93000+ stars
   AWS Kiro          整个围绕这个工作流构建的 agentic IDE
   └─ 微软与 AWS 都发布过内部数据:采用 SSD 后
      「从零重新生成」的循环减少 5–10 倍

一句话概括:问题始终是「无结构的 AI 辅助开发」,而不是 AI 辅助开发本身。

工具链现状 ​

工具说明
GitHub Spec Kit开源工具包,2026-05-07 时 v0.8.7,93000+ stars
AWS Kiro整个围绕这个工作流构建的 agentic IDE

微软与 AWS 都发布过内部数据:采用 SSD 后,「从零重新生成」的循环减少 5–10 倍。

流程细节与需求侧 ​

规格怎么写、输入输出契约怎么定、需求文档互相矛盾时怎么处理——那是 Spec 与需求理解 的内容。这一篇只定位它在整条工作流里的位置。

一句话概括 ​

问题始终是「无结构的 AI 辅助开发」,而不是 AI 辅助开发本身。

把能力很强的工具交给聪明人,然后说「去 vibe」,不给他们任何要遵守的契约、要待在里面的护栏、要对照校验的规格——这本来就该出事。

相关 ​

参考 ​

贡献者 ​

文件历史 ​